package com.neardrug.services.impl;

import com.neardrug.controller.dto.NumeratorUpdateDTO;
import com.neardrug.entity.NumeratorPo;
import com.neardrug.mapper.NumeratorMapper;
import com.neardrug.services.NumeratorService;
import com.neardrug.vo.NumeratorVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Service
public class NumeratorServiceImpl implements NumeratorService {
    @Resource
    private NumeratorMapper numeratorMapper;

    /**
     * 根据taskId查询分子页面数据
     * @param taskId
     * @return
     */
    @Override
    public List<NumeratorVO> selectNumerator(Integer taskId) {
        List<NumeratorPo> numeratorPoList = numeratorMapper.select(taskId);
        List<NumeratorVO> numeratorVOList = new ArrayList<>();
        for (int i = 0; i < numeratorPoList.size(); i++) {
            NumeratorPo numeratorPo = numeratorPoList.get(i);
            NumeratorVO numeratorVO = new NumeratorVO();
            BeanUtils.copyProperties(numeratorPo,numeratorVO);//属性拷贝
            numeratorVO.setNumeratorVOList(new ArrayList<>());
            if (numeratorVO.getIsMar() == 1) {//如果是母核结构,直接加入列表
                numeratorVOList.add(numeratorVO);
            }
        }
        for (int i = 0; i < numeratorPoList.size(); i++) {
            NumeratorPo numeratorPo = numeratorPoList.get(i);
            if (numeratorPo.getIsMar() == 0) {//如果是实例分子
                if (numeratorPo.getBelongMar() != null) {//如果有所属的母核
                    for (int j = 0; j < numeratorVOList.size(); j++) {
                        NumeratorVO numeratorVO = numeratorVOList.get(j);
                        if (numeratorVO.getId().equals(numeratorPo.getBelongMar())) {
                            NumeratorVO numeratorVO1 = new NumeratorVO();
                            BeanUtils.copyProperties(numeratorPo,numeratorVO1);
                            numeratorVO.getNumeratorVOList().add(numeratorVO1);
                        }
                    }
                } else {//如果没有所属母核,直接加入列表
                    NumeratorVO numeratorVO = new NumeratorVO();
                    BeanUtils.copyProperties(numeratorPo,numeratorVO);
                    numeratorVOList.add(numeratorVO);
                }
            }
        }
        return numeratorVOList;
    }

    @Override
    public void updateNumerator(NumeratorUpdateDTO numeratorUpdateDTO) {
        NumeratorPo numeratorPo = new NumeratorPo();
        BeanUtils.copyProperties(numeratorUpdateDTO,numeratorPo);
        numeratorMapper.update(numeratorPo);
    }

    @Override
    public void deleteById(Integer id) {
        numeratorMapper.deleteById(id);
    }

    @Override
    public void delNoNumberNumeratorByTaskId(Integer taskId) {
        numeratorMapper.delNoNumberNumeratorByTaskId(taskId);
    }
}
